MongoDB学习总结 |
您所在的位置:网站首页 › mongodb date排序 › MongoDB学习总结 |
简明:本文详细记录使用Aggregation聚合框架对MongoDB数据库常见操作,包括过滤、分组、求和、排序和分页设计实现等等。相比较于MongoTemplate,使用Aggregation对MongoDB操作更加便捷、方便,特别是分组求和、计算平均值情况等。 (文章持续更新------后期添加更多基本操作) (个人记录学习总结内容,若出现错误/改进地方,请指出/分享,共同学习进步!!!) 一、简介 1、聚合简介 MongoDB中聚合通常用来处理数据,如分组求和、求平均值和排序等,对实现数据复杂操作较为方便,简单来说:聚合就是通过对集合中的数据进行运算,转换为自己需要的形式。 与上篇文章使用MongoTemplate操作数据相比较,Aggregation聚合操作显得更加有优势和便捷,代码清晰简洁,优化查询语句。 2、聚合管道简介 简明:在Linux中,管道一般是将当前命令的执行结果作为下个命令执行的参数。 MongoDB聚合管道:将MongoDB文档在一个管道处理完毕后,将结果传递给下一个管道处理。简单来说:管道就是聚合的整个运算过程。 3、聚合管道常用的表达式(常用) 表达式 功能 等价SQL $match 过滤数据,输出符合条件文档 where $project 修改输入文档结构(筛选展示文档的键) 个人理解(select) $limit 限制计算文档结果返回数 limit $sort 文档排序 order by $group 文档分组 group by $skip 跳过指定数量的文档 skip $unwind 展开数组(数组内容拆分显示) 无 二、测试案例 测试数据如下: 1、实体类 简明:为简化代码,已引入Lombok依赖,省略Setter()、Getter()方法 简明:@Document注解指定数据存储/操作的集合是PersonCollection import lombok.Getter; import lombok.Setter; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; /** * Person 实体类 * * @Document注解 默认情况下,创建Person集合(可使用@Document注解指定创建集合PersonCollection) * * @author LBF * @date 2022/1/18 11:18 */ @Setter @Getter @Document(collection = "PersonCollection") public class Person { /** Id */ @Id private ObjectId id; /** 名字 */ private String name; /** 年龄 */ private Integer age; /** 地址 */ private String addr; /** 手机号 */ private Integer phone; /** 类别(测试用) */ private String type; public Person(String name, Integer age, String addr, Integer phone, String type) { this.name = name; this.age = age; this.addr = addr; this.phone = phone; this.type = type; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", addr='" + addr + '\'' + ", phone=" + phone + ", type='" + type + '\'' + '}'; } } 2、测试代码 注意:测试代码中,键值是指数据库文档的键,而不是指实体类的键值(没有使用反射机制) (1)常见聚合查询------->match(过滤)、group by(分组)、sum(求和)、sort(排序) /** * 常见聚合查询 ---------- 1 * @return 个人封装的返回体 */ @GetMapping("/findDocumentByAgg1") public AjaxResult findDocumentByAgg1(){ // 初始化查询容器(用来构建查询条件) Criteria criteria = new Criteria(); // 设置查询条件: 23 每个分组的求和结果取个别名:totalAge Aggregation.group("type").sum("age").as("totalAge"), // 将分组求和的结果totalAge,按照降序排序 Aggregation.sort(Sort.by("totalAge").descending()) ); // 将拼接的聚合管道操作传入 // 第一个参数:aggregation聚合操作 // 第二个参数:操作的集合名称 // 第三个参数:输出类型(此处使用Document,包含_id键情况下使用实体类Person会类型转换报错) AggregationResults results = mongoTemplate.aggregate(aggregation,"PersonCollection",Document.class); return AjaxResult.success(results.getMappedResults()); } (2)常见聚合查询------->project(展示键)、skip(跳过) @GetMapping("/findDocumentByAgg2") public AjaxResult findDocumentByAgg2(){ // 初始化查询容器(用来构建查询条件) Criteria criteria = new Criteria(); // 设置查询条件: 23 (持续补充) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |